/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package cl.ejemplo.model;

import cl.ejemplo.beans.Funcionario;
import cl.ejemplo.beans.LavanderiaE;
import cl.ejemplo.beans.Ropa;
import cl.ejemplo.helpers.Validador;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Camila
 */
public class Administrador_mod extends Conexion {
     /**
 * Returns an Image object that can then be painted on the screen. 
 * The url argument must specify an absolute {@link URL}. The name
 * argument is a specifier that is relative to the url argument. 
 * <p>
 * This method always returns immediately, whether or not the 
 * image exists. When this applet attempts to draw the image on
 * the screen, the data will be loaded. The graphics primitives 
 * that draw the image will incrementally paint on the screen. 
 *
 * @return      the image at the specified URL
 * @see         Image
 */
    public ArrayList<Funcionario> verFuncionarios() { // OK
        ArrayList<Funcionario> funcionario = new ArrayList<>();
        try {
            StringBuilder sb = new StringBuilder();
            StringBuilder direccion = new StringBuilder();

            sb.append("select * from funcionario ");
            ResultSet rs = ObtenerConsulta(sb.toString());
            while (rs.next()) {
                direccion.append(rs.getString("comuna"));
                direccion.append(rs.getString("calle"));
                direccion.append(rs.getString("numero"));
                funcionario.add(new Funcionario(rs.getString("id_rut"), rs.getString("nombrec"), rs.getString("apellidop"), rs.getString("apellidom"), rs.getString("email"),rs.getString("comuna"),rs.getString("calle"),rs.getString("numero") , rs.getString("sexo"), rs.getString("fechanac"), rs.getInt("telefono"), rs.getString("rol"), rs.getDate("turnoinicio").toLocaleString(), rs.getDate("turnofin").toLocaleString(), rs.getString("contrato"),rs.getInt("id_unidadc")));

            }
        } catch (SQLException ex) {
            Logger.getLogger(Administrador_mod.class.getName()).log(Level.SEVERE, null, ex);
        }
        return funcionario;
    }

    /**
     *
     * @param funcionario
     * @return
     */
    public ArrayList<Funcionario> borrarFuncionario(Funcionario funcionario) { //OK
        ArrayList<Funcionario> fnc = new ArrayList();
        fnc.add(new Funcionario(funcionario.getNumFuncionario(),funcionario.getNombre(), funcionario.getApellidp(), funcionario.getApellidom()));
        StringBuilder sb = new StringBuilder();
        sb.append("delete from funcionario where id_funcionario=");
        sb.append("");
        sb.append(funcionario.getNumFuncionario());
        sb.append("");
        ejecutaSql(sb.toString());
        System.out.println("Se a eliminado el funcionario" + funcionario.getNombre() + funcionario.getApellidp());
        return fnc; //retorna el funcionario eliminado
    }

    /**
     *
     * @param ropa
     * @return
     */
    public ArrayList<Ropa> borrarRopa(Ropa ropa) { //OK
        ArrayList<Ropa> rop = new ArrayList();
        rop.add(new Ropa(ropa.getNombre(), ropa.getColor(), ropa.getTalla()));
        StringBuilder sb = new StringBuilder();
        sb.append("delete from ropa where id_ropa=");
        sb.append("");
        sb.append(ropa.getNumRopa());
        sb.append("");
        ejecutaSql(sb.toString());
        System.out.println("Se a eliminado la ropa" + ropa.getNombre() + ropa.getColor() + ropa.getTalla());
        return rop;
    }

    /**
     *
     * @param ropa
     * @return
     */
    public ArrayList<Ropa> darBajaRopa(Ropa ropa) { //OK
        ArrayList<Ropa> rop = new ArrayList();
        Validador validador = new Validador();
        StringBuilder sb = new StringBuilder();

        rop.add(new Ropa(ropa.getNombre(), ropa.getColor(), ropa.getTalla()));
        sb.append("update ropa set fecha_baja=");
        sb.append("'");
        sb.append(validador.asignarFecha());
        sb.append("'");
        sb.append("where id_ropa=");
        sb.append("");
        sb.append(ropa.getNumRopa());
        sb.append("");
        ejecutaSql(sb.toString());
        System.out.println("Se a dado de baja la ropa = " + ropa.getNombre());
        System.out.println("En la fecha = " + validador.asignarFecha());
        return rop;
    }

    /**
     *
     * @param lavanderiae
     * @return
     */
    public ArrayList<LavanderiaE> borrarLavanderia(LavanderiaE lavanderiae) { //OK
        ArrayList<LavanderiaE> lav = new ArrayList();
        StringBuilder sb = new StringBuilder();
        lav.add(new LavanderiaE(lavanderiae.getNombre()));
        sb.append("delete from lavanderiae where id_lavanderiae=");
        sb.append("");
        sb.append(lavanderiae.getNumLavanderia());
        sb.append("");
        ejecutaSql(sb.toString());
        System.out.println("Se ha borrado la lavandería" + lavanderiae.getNombre());
        return lav;
    }

    /**
     *
     * @param funcionario
     * @return
     */
    public ArrayList<Funcionario> escogerFuncionario(Funcionario funcionario){ //OK
        ArrayList<Funcionario> fnc = new ArrayList();
        try{
            StringBuilder sb = new StringBuilder();
            StringBuilder direccion = new StringBuilder();
            sb.append("select id_funcionario,id_rut,nombrec,apellidop,apellidom,email,comuna,calle,numero,sexo,fechanac,telefono,rol,turnoinicio,turnofin,contrato from funcionario where id_funcionario=");
            sb.append("");
            sb.append(funcionario.getNumFuncionario());
            sb.append("");
            ResultSet rs = ObtenerConsulta(sb.toString());
            while(rs.next()){

                fnc.add(new Funcionario(rs.getInt("id_funcionario"),rs.getString("id_rut"),rs.getString("nombrec"),rs.getString("apellidop"),rs.getString("apellidom"),rs.getString("email"),rs.getString("direccion"),rs.getString("sexo"),rs.getString("fechanac"),rs.getInt("telefono"),rs.getString("rol"),rs.getDate("turnoinicio").toLocaleString(),rs.getDate("turnofin").toLocaleString(),rs.getString("contrato"),rs.getInt("id_unidadc"),rs.getInt("id_cuenta")));
        }
        }catch (SQLException ex) {
            Logger.getLogger(UnidadC_mod.class.getName()).log(Level.SEVERE, null, ex);
        }
        return fnc;
    }
    
    /**
     *
     * @param lavanderiae
     * @return
     */
    public ArrayList<LavanderiaE> escogerLavanderíaE(LavanderiaE lavanderiae) { //OK
    ArrayList <LavanderiaE> lav = new ArrayList();
    try{
     StringBuilder sb = new StringBuilder();
     sb.append("select id_lavanderiae, nombre from lavanderiae where id_lavanderiae=");
     sb.append("");
     sb.append(lavanderiae.getNumLavanderia());
     sb.append("");
     ResultSet rs = ObtenerConsulta(sb.toString());
     
     while(rs.next()){
         lav.add(new LavanderiaE(rs.getInt("id_lavanderiae"),rs.getString("nombre")));
     }
    } catch (SQLException ex) {
            Logger.getLogger(Administrador_mod.class.getName()).log(Level.SEVERE, null, ex);
        }
    
        System.out.println("Se a escogido la lavanderia e número:" + lavanderiae.getNumLavanderia() );
        System.out.println("De nombre : " + lavanderiae.getNombre());
    return lav;
    } 
    
    /**
     *
     * @param ropa
     * @return
     */
    public ArrayList<Ropa> escogerRopa(Ropa ropa) { //OK
        ArrayList<Ropa> rop = new ArrayList();
        try{
     StringBuilder sb = new StringBuilder();
     sb.append("select id_ropa, nombre, color, cant_ropa, estado_ropa, talla, fecha_ing, fecha_baja, disponibilidad from ropa where id_ropa=");
     sb.append("");
     sb.append(ropa.getNumRopa());
     sb.append("");
     ResultSet rs = ObtenerConsulta(sb.toString());
     while(rs.next()){
         rop.add(new Ropa(rs.getInt("id_ropa"),rs.getString("nombre"), rs.getString("color"), rs.getInt("cant_ropa"), rs.getString("estado_ropa"), rs.getString("talla"), rs.getString("fecha_ing"),rs.getString("fecha_baja"), rs.getString("disponibilidad")));
     }  
     } catch (SQLException ex) {
            Logger.getLogger(Administrador_mod.class.getName()).log(Level.SEVERE, null, ex);
        }
        System.out.println("Se ha escogido la ropa:" + ropa.getNumRopa()+ropa.getNombre()+ropa.getColor()+ropa.getEstado_ropa());
        return rop;
    }

    
    private void insertarCuenta(Funcionario fnc){
        StringBuilder sb = new StringBuilder();
        String usuario =  fnc.getRut();
        String clave = fnc.getApellidp();
        String rol = fnc.getRol();
        Statement st;
        int  tipo_user;
        if("Administrador".equals(fnc.getRol())){
            tipo_user = 1;
        }else if("Encargado".equals(fnc.getRol())){
            tipo_user = 2;
        }else{
            tipo_user = 3; 
        }
        int disponibilidad = 1;
        
        sb.append("insert into cuenta (usuario,clave,tipo_usuario,disponibilidad) values(");
        sb.append("'");
        sb.append(usuario);
        sb.append("'");
        sb.append(",");
        sb.append("'");
        sb.append(clave);
        sb.append("'");
        sb.append(",");
        sb.append(tipo_user);
        sb.append(",");
        sb.append(disponibilidad);
        sb.append(")");
        
          ejecutaSql(sb.toString());
        System.out.println(sb.toString());
        obtenerNumUsuario();
    } 
    
    private long obtenerNumUsuario(){
        long id = 0 ;
        try{
        StringBuilder sb = new StringBuilder();
        sb.append("select last_insert_id()");
        ResultSet rs = ObtenerConsulta(sb.toString());
        while(rs.next()){
            id = rs.getLong("last_insert_id()");
            System.out.println(id);
        }
        }catch (SQLException ex) {
            Logger.getLogger(Administrador_mod.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return id;
    }
    /**
     *
     * @param fnc
     * @return
     */
    public ArrayList<Funcionario> ingresarFuncionario(Funcionario fnc) { //OK
        ArrayList<Funcionario> funcionario = new ArrayList();
       
        
        funcionario.add(new Funcionario(fnc.getNombre(), fnc.getRut(), fnc.getApellidp(), fnc.getApellidom(), fnc.getEmail(), fnc.getComuna(), fnc.getCalle(), fnc.getNumero(), fnc.getSexualidad(), fnc.getFechanac(), fnc.getTelefono(), fnc.getRol(), fnc.getTurnoinicio(), fnc.getTurnofin(), fnc.getContrato(),fnc.getUnidadc(),fnc.getCuenta()));

 Connection conex;

        Statement st;
        Statement st1;
        Statement st2;
        String resultado;
        conex = null;
        st = null;
        st1 = null;
        st2 = null; //executequery
        int  tipo_user = 0;
        int disponibilidad = 1;

        String unidad = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conex = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "");
            st = conex.createStatement();
            st1 = conex.createStatement();
            st2 = conex.createStatement();
            System.out.println("Conexion establecida");
        } catch (Exception e) {
            System.out.println("error desconocido: " + e);
        }

        System.out.println("Entro la conulta");

        try {
            System.out.println("entro la consult");

            if (fnc.getRol().equals("Administrador")) {
                tipo_user = 1;
            } else if (fnc.getRol().equals("Encargado")) {
                tipo_user = 2;
            } else {
                tipo_user = 3;
            }
            st.executeUpdate("insert into cuenta(usuario,clave,tipo_usuario,disponibilidad) values ('" + fnc.getRut() + "','" + fnc.getApellidp() + "','" + tipo_user + "','" + disponibilidad + "')");
            
                        
             rs = st1.executeQuery("select last_insert_id()");
             rs.next();
             int id = rs.getInt("last_insert_id()");
             System.out.println(id);
             st1.close();
            st.close();
            //
            System.out.println("Entro");
            
           st2.executeUpdate("insert into funcionario (id_rut,nombrec,apellidop,apellidom,email,comuna,\n"
                    + "calle,numero\n"
                    + ",sexo,fechanac,telefono,rol,\n"
                    + "turnoinicio,turnofin,contrato,id_cuenta,id_unidadc)"
                    + " values ('"+fnc.getRut()+"','"+fnc.getNombre()+"', '"+fnc.getApellidp()+"' , '"+fnc.getApellidom()+"' , '"+fnc.getEmail()+"' , '"+fnc.getComuna()+"' , '"+fnc.getCalle()+"' , '"+fnc.getNumero()+"' , '"+fnc.getSexualidad()+"' , '"+fnc.getFechanac()+"' , "+fnc.getTelefono()+" , '"+fnc.getRol()+"','"+fnc.getTurnoinicio()+"' ,'"+fnc.getTurnofin()+"','"+fnc.getContrato()+"',"+ id +", "+fnc.getUnidadc()+")");
            System.out.println("Consulta exitosa");
            System.out.println(st2.toString());
            st2.close();
            conex.close();
            
        } catch (SQLException e) {
            System.out.println("Error en consulta SQL: " + e);
            System.out.println(st2.toString());
        }
        System.out.println("Se ha ingresado el funcionariola" + fnc.getNombre());
        return funcionario;
    }

    /**
     *
     * @param lavanderiae
     * @return
     */
    public ArrayList<LavanderiaE> ingresarLavanderiaE(LavanderiaE lavanderiae) { //OK
        ArrayList<LavanderiaE> lav = new ArrayList();
        StringBuilder sb = new StringBuilder();
        lav.add(new LavanderiaE(lavanderiae.getNombre()));
        sb.append("insert into lavanderiae (nombre) values (");
        sb.append("'");
        sb.append(lavanderiae.getNombre());
        sb.append("'");
        sb.append(")");
        ejecutaSql(sb.toString());
        System.out.println("Se a insertado la lavanderia : " + lavanderiae.getNombre());
        return lav;
    }

    /**
     *
     * @param ropa
     * @return
     */
    public ArrayList<Ropa> ingresarRopaNueva(Ropa ropa) { //OK
        ArrayList<Ropa> rop = new ArrayList();
        StringBuilder sb = new StringBuilder();
        rop.add(new Ropa(ropa.getNombre(), ropa.getColor(), ropa.getCant_ropa(), ropa.getEstado_ropa(), ropa.getTalla(), ropa.getFecha_ing(), "", ropa.getDisponibilidad()));
        sb.append("insert into ropa (nombre,color,cant_ropa,estado_ropa,talla,fecha_ing,fecha_baja,disponibilidad) values(");
        sb.append("'");
        sb.append(ropa.getNombre());
        sb.append("'");
        sb.append(",");
        sb.append("'");
        sb.append(ropa.getColor());
        sb.append("'");
        sb.append(",");
        sb.append("");
        sb.append(ropa.getCant_ropa());
        sb.append("");
        sb.append(",");
        sb.append("'");
        sb.append(ropa.getEstado_ropa());
        sb.append("'");
        sb.append(",");
        sb.append("'");
        sb.append(ropa.getTalla());
        sb.append("'");
        sb.append(",");
        sb.append("'");
        sb.append(ropa.getFecha_ing());
        sb.append("'");
        sb.append(",");
        sb.append("'");
        sb.append("0000-00-00 00:00:00");
        sb.append("'");
        sb.append(",");
        sb.append("'");
        sb.append(ropa.getDisponibilidad());
        sb.append("'");
        sb.append(")");       
        ejecutaSql(sb.toString());
        System.out.println("Se a insertado" + ropa.getNombre());
        return rop;
    }

    /**
     *
     * @param fnc
     * @return
     */
    public ArrayList<Funcionario> modificarFuncionario(Funcionario fnc) { //OK
        ArrayList<Funcionario> funcionario = new ArrayList();
        funcionario.add(new Funcionario(fnc.getNombre(), fnc.getRut(), fnc.getApellidp(), fnc.getApellidom(), fnc.getEmail(), fnc.getComuna(),fnc.getCalle(), fnc.getNumero(), fnc.getSexualidad(), fnc.getFechanac(), fnc.getTelefono(), fnc.getRol(), fnc.getTurnoinicio(), fnc.getTurnofin(), fnc.getContrato(),fnc.getUnidadc(),fnc.getCuenta()));
        StringBuilder sb = new StringBuilder();
        sb.append("update funcionario set id_rut=");
        sb.append("'");
        sb.append(fnc.getRut());
        sb.append("'");
        sb.append(", nombre=");
        sb.append("'");
        sb.append(fnc.getNombre());
        sb.append("'");
        sb.append(",apellidop=");
        sb.append("'");
        sb.append(fnc.getApellidp());
        sb.append("'");
        sb.append(", apellidom=");
        sb.append("'");
        sb.append(fnc.getApellidom());
        sb.append("'");
        sb.append(", email=");
        sb.append("'");
        sb.append(fnc.getEmail());
        sb.append("'");
        sb.append(", comuna=");
        sb.append("'");
        sb.append(fnc.getComuna());
        sb.append("'");
        sb.append(", calle=");
        sb.append("'");
        sb.append(fnc.getCalle());
        sb.append("'");
        sb.append(", numero=");
        sb.append("'");
        sb.append(fnc.getNumero());
        sb.append("'");

        sb.append(", sexo=");
        sb.append("'");
        sb.append(fnc.getSexualidad());
        sb.append("'");
        sb.append(", fechanac=");
        sb.append("'");
        sb.append(fnc.getFechanac());
        sb.append("");
        sb.append(", telefono=");
        sb.append("");
        sb.append(fnc.getTelefono());
        sb.append("'");
        sb.append(", rol=");
        sb.append("'");
        sb.append(fnc.getRol());
        sb.append("'");
        sb.append(", turnoinicio=");
        sb.append("'");
        sb.append(fnc.getTurnoinicio());
        sb.append("'");
        sb.append(", turnofin=");
        sb.append("'");
        sb.append(fnc.getTurnofin());
        sb.append("'");
        sb.append(", contrato=");
        sb.append("'");
        sb.append(fnc.getContrato());
        sb.append("'");
        ejecutaSql(sb.toString());
        System.out.println("Se ha modificado al uuario con el nombre de: " + fnc.getNombre()+fnc.getApellidp()+fnc.getApellidom());
        return funcionario;
    }

    /**
     *
     * @param lavanderiae
     * @return
     */
    public ArrayList<LavanderiaE> modificarLavanderiaE(LavanderiaE lavanderiae) { //OK
        ArrayList<LavanderiaE> lav = new ArrayList();
        lav.add(new LavanderiaE(lavanderiae.getNumLavanderia(),lavanderiae.getNombre()));
        StringBuilder sb = new StringBuilder();
        sb.append("update lavanderiae set nombre=");
        sb.append("'");
        sb.append(lavanderiae.getNombre());
        sb.append("'");
        sb.append("");
        sb.append("where id_lavanderiae=");
        sb.append("");
         sb.append("'");
        sb.append(lavanderiae.getNumLavanderia());
        sb.append("'");
         ejecutaSql(sb.toString());
        System.out.println("Se a modificado la lavanderia");
        return lav;
    }

    /**
     *
     * @param ropa
     * @return
     */
    public ArrayList<Ropa> modificarRopa(Ropa ropa) { //OK
         ArrayList<Ropa> rop = new ArrayList();
         rop.add(new Ropa (ropa.getNombre(),ropa.getColor(),ropa.getCant_ropa(),ropa.getEstado_ropa(),ropa.getTalla(),ropa.getFecha_ing(),"",ropa.getDisponibilidad()));
         StringBuilder sb = new StringBuilder();
         sb.append("update ropa set nombre=");
         sb.append("'");
         sb.append(ropa.getNombre());
         sb.append("'");
         sb.append(", color=");
         sb.append("'");
         sb.append(ropa.getColor());
         sb.append("");
         sb.append(", cant_ropa=");
         sb.append("");
         sb.append(ropa.getCant_ropa());
         sb.append("'");
         sb.append(", estado_ropa=");
         sb.append("'");
         sb.append(ropa.getEstado_ropa());
         sb.append("'");
         sb.append(", talla=");
         sb.append("'");
         sb.append(ropa.getTalla());
         sb.append("'");
         sb.append(", fecha_ing=");
         sb.append("'");
         sb.append(ropa.getFecha_ing());
         sb.append("'");
         sb.append(", disponibilidad=");
         sb.append("'");
         sb.append(ropa.getDisponibilidad());
         sb.append("'");
         ejecutaSql(sb.toString());
         System.out.println("Se a modificado la  ropa" + ropa.getNombre()+ropa.getColor()+ropa.getTalla());
         return rop;
         
    }
    
    /**
     *
     * @param lavanderiae
     * @return
     */
    public ArrayList<LavanderiaE> verLavanderiaE(LavanderiaE lavanderiae) { //OK
        ArrayList<LavanderiaE> lav = new ArrayList();
        
        try{
            StringBuilder sb = new StringBuilder();
        sb.append("select id_lavanderiae, nombre from lavanderiae where nombre=");
        sb.append("'");
        sb.append(lavanderiae.getNombre());
        sb.append("'");
        sb.append("and id_lavanderiae=");
        sb.append("");
        sb.append(lavanderiae.getNumLavanderia());
        sb.append(""); 
        ResultSet rs = ObtenerConsulta(sb.toString());
        while(rs.next()){
            
          lav.add(new LavanderiaE(rs.getInt("id_lavanderiae"),rs.getString("nombre")));
         System.out.println("id_lavanderia" + lavanderiae.getNumLavanderia() );
        System.out.println("lavanderia " + lavanderiae.getNombre());     
        }
     
        } catch (SQLException ex) {
            Logger.getLogger(Administrador_mod.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return lav;
    }

    /**
     *
     * @return
     */
    public ArrayList<LavanderiaE> verLavanderiasE() { //OK
        ArrayList<LavanderiaE> lav = new ArrayList<>();
        try {
            StringBuilder sb = new StringBuilder();

            sb.append("select * from lavanderiae");
            ResultSet rs = ObtenerConsulta(sb.toString());
            while (rs.next()) {
                lav.add(new LavanderiaE(rs.getInt("id_lavanderiae"),rs.getString("nombre")));
                System.out.println(rs.getString("nombre"));

            }
        } catch (SQLException ex) {
            Logger.getLogger(Administrador_mod.class.getName()).log(Level.SEVERE, null, ex);
        }
        return lav;
    }
    
    /**
     *
     * @param Funcionario
     * @return
     */
    public ArrayList <Funcionario> verFuncionario(Funcionario Funcionario){ //OK
        ArrayList <Funcionario> fnc = new ArrayList<>();
        try{
            StringBuilder sb = new StringBuilder();
        sb.append("select f.nombrec,f.rut,f.apellidop,f.apellidom from funcionario where nombre=");
        sb.append("'");
        sb.append(Funcionario.getNombre());
        sb.append("'");
        sb.append("and id_rut=");
        sb.append("'");
        sb.append(Funcionario.getRut());
        sb.append("'"); 
        ResultSet rs = ObtenerConsulta(sb.toString());
        while(rs.next()){
            
    
        }
     
        } catch (SQLException ex) {
            Logger.getLogger(Administrador_mod.class.getName()).log(Level.SEVERE, null, ex);
        }
        return fnc;
    }

    /**
     *
     * @return
     */
    public ArrayList<Ropa> verRopaAdm(){ //OK
        ArrayList<Ropa> ropa = new ArrayList<>();
   
        try{
        StringBuilder sb=new StringBuilder();          
            sb.append("select * from ropa");
             ResultSet rs=ObtenerConsulta(sb.toString());
             while(rs.next()){
               

                ropa.add(new Ropa(rs.getInt("id_ropa"),rs.getString("nombre"),rs.getString("color"),rs.getInt("cant_ropa"),rs.getString("estado_ropa"),rs.getString("talla"),rs.getString("fecha_ing"),rs.getString("fecha_baja"),rs.getString("disponibilidad")));
                 
             }
        }catch (SQLException ex) {
            Logger.getLogger(UnidadC_mod.class.getName()).log(Level.SEVERE, null, ex);
        }
        return ropa;
    
     }
}
